<?php

Class UsuarioDAO{
    
    public function autenticarUsuario(Usuario $usuario) {
        
        try {
            //Banco de dados
            $conexao = new Conexao();
            $conn = $conexao->abrirConexao(); 
            
            //Recuperar as variaveis
            $login = $usuario->getLogin();
            $senha = $usuario->getSenha();
            
            $query = "
                SELECT nome, tipo 
                FROM `usuario` 
                WHERE login = ? 
                AND senha = ? 
                AND status = 'ATIVADO'
            ";
            
            $stmt = $conn->prepare($query);
            $stmt->bindValue(1, $login);
            $stmt->bindValue(2, $senha);
            $stmt->execute();
            
            $count = $stmt->rowCount();
            
            if($count > 0){
                session_start ();
                
                foreach ($stmt as $value) {
                    $_SESSION['nome'] = $value['nome'];
                    $_SESSION['tipo'] = $value['tipo'];                    
                }
                
                switch ($_SESSION['tipo']) {
                    case 'ADMINISTRADOR':
                        header("Location: ../view/index.php");
                        break;
                    
                    case 'FINANCEIRO':
                        header("Location: ../view-financeiro/index.php");
                        break;
                    
                    case 'ATENDIMENTO':
                        header("Location: ../view-atendimento/index.php");
                        break;
                    
                    case 'PRODUTOR':
                        header("Location: ../view-produtor/index.php");
                        break;

                    default:
                        break;
                } 
                
            }else{
                header("Location: ../../loginUsuario.php?message_error=erro_login");
            }
            
        } catch (Exception $exc) {
            echo $exc->getTraceAsString();
        }
                
    }
    
    public function validarLogin(Usuario $usuario) {
        
        try {
            //Banco de dados
            $conexao = new Conexao();
            $conn = $conexao->abrirConexao(); 
            
            //Recuperar as variaveis
            $login = $usuario->getLogin();
            
            $query = "
                SELECT login 
                FROM `usuario` 
                WHERE login = ?
                AND shadow = 0
            ";
            
            $stmt = $conn->prepare($query);
            $stmt->bindValue(1, $login);
            $stmt->execute();
            
            $count = $stmt->rowCount();
            
            if($count > 0){
                $validarLogin = TRUE;                
            }else{
                $validarLogin = FALSE;
            }
            
            return $validarLogin;
            
        } catch (Exception $exc) {
            echo $exc->getTraceAsString();
        }
        
    }
    
    public function validarUsuario($tipoUsuario) {
        
        //Inicia a sessão
        if(!isset ($_SESSION)){
            session_start();
        }
        
        //Verifica se existe o nome do usuario
        if(!isset($_SESSION['tipo'])){
            session_destroy();
            header("Location: ../../loginUsuario.php");
        }
        
        if($_SESSION['tipo'] != $tipoUsuario){
            session_destroy();
            header("Location: ../../loginUsuario.php");
        }
        
    }
    
    public function pesquisarUsuario($tipo_pesquisa ,$pesquisa_usuario){
                
        try {

            //Banco de dados
            $conexao = new Conexao();
            $conn = $conexao->abrirConexao();

            //Codigo SQL
            $result = $conn->query("
                SELECT * 
                FROM usuario 
                WHERE shadow = 0 
                AND ". $tipo_pesquisa ." LIKE '%" . $pesquisa_usuario . "%'
                AND `tipo` != 'PRODUTOR'
            ");

            $usuario = array();
            $count = 0;

            foreach ($result as $value) {
                //Recupera valores dos seguros
                $usuario[$count] = new Usuario();
                $usuario[$count]->setIdUsuario($value['id']);
                $usuario[$count]->setEmail($value['email']);
                $usuario[$count]->setNome($value['nome']);
                $usuario[$count]->setTipo($value['tipo']);
                $usuario[$count]->setStatus($value['status']);
                $count++;
            }

            $conn = $conexao->fecharConexao();
            return $usuario;
        } catch (Exception $exc) {
            echo $exc->getTraceAsString();
        }
            
    }
    
    
    public function selecionarUsuario($idUsuario) {
        
        try {
            //Banco de dados
            $conexao = new Conexao();
            $conn = $conexao->abrirConexao();

            //Codigo SQL
            $result = $conn->query("
                SELECT * 
                FROM `usuario` 
                WHERE `shadow` = 0 AND id = " . $idUsuario . " 
            ");

            $num = count($result);
            if ($num == 0) {                
                $usuario = false;
                
            } else {
                $usuario = new Usuario();
                foreach ($result as $value) {
                    $usuario->setEmail($value['email']);
                    $usuario->setNome($value['nome']);
                    $usuario->setLogin($value['login']);
                    $usuario->setSenha($value['senha']);
                    $usuario->setTipo($value['tipo']);
                    $usuario->setStatus($value['status']);
                }
            }

            $conn = $conexao->fecharConexao();
            return $usuario;
        } catch (Exception $exc) {
            echo $exc->getTraceAsString();
        }
        
    }
    
    public function listarUsuarios() {
        
        try {

            //Banco de dados
            $conexao = new Conexao();
            $conn = $conexao->abrirConexao();

            //Codigo SQL
            $result = $conn->query("
                SELECT * 
                FROM `usuario` 
                WHERE `shadow` = 0 AND `tipo` != 'PRODUTOR'
            ");

            $usuario = array();
            $count = 0;

            foreach ($result as $value) {
                //Recupera valores dos seguros
                $usuario[$count] = new Usuario();
                $usuario[$count]->setIdUsuario($value['id']);
                $usuario[$count]->setEmail($value['email']);
                $usuario[$count]->setNome($value['nome']);
                $usuario[$count]->setTipo($value['tipo']);
                $usuario[$count]->setStatus($value['status']);
                $count++;
            }

            $conn = $conexao->fecharConexao();
            return $usuario;
        } catch (Exception $exc) {
            echo $exc->getTraceAsString();
        }
            
    }
    
    public function cadastrarUsuario(Usuario $usuario) {
        
        try {

            //Banco de dados
            $conexao = new Conexao();
            $conn = $conexao->abrirConexao();

            //Codigo SQL
            $query = "
                INSERT INTO usuario (id, email, nome, login, 
                senha, tipo, status, shadow) 
                VALUES (NULL, ?, ?, ?, ?, ?, 'ATIVADO', '0');
            ";

            //Cadastro
            $stmt = $conn->prepare($query);
            $stmt->bindValue(1, utf8_decode($usuario->getEmail()));
            $stmt->bindValue(2, utf8_decode($usuario->getNome()));
            $stmt->bindValue(3, utf8_decode($usuario->getLogin()));
            $stmt->bindValue(4, utf8_decode($usuario->getSenha()));
            $stmt->bindValue(5, utf8_decode($usuario->getTipo()));
            $stmt->execute();

            $conn = $conexao->fecharConexao();
            return true;
            
        } catch (Exception $exc) {
            echo $exc->getTraceAsString();
            return false;
        }
    }
    
    public function editarUsuario($idUsuario, Usuario $usuario) {
        
        try {
            //Banco de dados
            $conexao = new Conexao();
            $conn = $conexao->abrirConexao();
            
            //Codigo SQL
            $query = "UPDATE usuario SET email = ?, nome = ?, senha = ?, tipo = ?, status = ? WHERE usuario.id = ?;";

            //Editar
            $stmt = $conn->prepare($query);
            $stmt->bindValue(1, utf8_decode($usuario->getEmail()));
            $stmt->bindValue(2, utf8_decode($usuario->getNome()));
            $stmt->bindValue(3, utf8_decode($usuario->getSenha()));
            $stmt->bindValue(4, utf8_decode($usuario->getTipo()));
            $stmt->bindValue(5, utf8_decode($usuario->getStatus()));
            $stmt->bindValue(6, $idUsuario);
            $stmt->execute();
            
                                    
            $conn = $conexao->fecharConexao();
            return true;
            
        } catch (Exception $exc) {
            echo $exc->getTraceAsString();
            return false;
        }
        
    }
    
    public function excluirUsuario($idUsuario) {
        
        try {

            //Banco de dados
            $conexao = new Conexao();
            $conn = $conexao->abrirConexao();

            //Codigo SQL
            $query = "
                UPDATE usuario 
                SET status = 'DESATIVADO', shadow = 1 
                WHERE usuario.id = ?;
            ";
            
            $stmt = $conn->prepare($query);
            $stmt->bindValue(1, $idUsuario);
            $stmt->execute();
            
            return true;
            
        } catch (Exception $exc) {
            echo $exc->getTraceAsString();
        }
        
    }
    
    public function sairUsuario() {
        session_start(); // Inicia a sessão
        session_destroy(); // Destrói a sessão limpando todos os valores salvos
        header("Location: ../../loginUsuario.php");
    }
    
}

?>
